在實驗後的階段我們會使用到一個問卷,這種問卷就是一種讓實驗後的受試者可以回答一些感受上的問題,或是回答在Presence 與 Fatigue 感受上的一些問題,今天我想做一個有趣的實作。也就是針對我們在 Unity 中回答後的一些問題回傳到 Google From 上去將其顯示與紀錄,同時也了解一下 Google Form 整體的使用規則與儲存資料的一些小方法,當然今天還會碰到一些網頁的問題,使用上很簡單大概是不會有甚麼問題XDDD。
接下來就讓我們實作一個簡單的小專題該目標就是輸入我們的姓名、手機號碼、信箱並回傳到我們的Google Form 上。
首先先將 UI 決定好,這邊我們將會設定三個 Unity 的 InputField 去幫助我們輸入資料。整體的介面如同以下形式呈現。 我們會需要 InputField, Toggle button, text, Panel(目前不需要)。
我們在環境中新增一張照片,點選後將其Texture Type 調整為 Sprite (2D and UI),將我們的 Ima下載的照片調整到Image 中的 Source Image 內。
開始設計我們的 UI,並且將我們所需要使用到的各項 Input 元件置入到環境中。整個設計的樣式如下,依照個人喜好即可。
接著就到 Google 新增一個 Google Form 。
新增該Google form 的內容。
接著按右上角眼睛的圖示,這個就會預覽目前的form 內容。
預設的樣子。
在這個畫面當中按右鍵來點選 "檢視網頁原始碼”。
首先我們新增一個腳本,ConnectGoogle.cs 在一個空白腳本上
我們接下來會學習到以下的內容:
public Toggle[] toggleArr = new Toggle[3]; // all have 3 toggles
public GameObject userName;
public GameObject phone;
public GameObject email;;
// get string
private string name;
private string phone;
private string email;
private string gender;
[SerializeField]
private string connectURL = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSetCRbABNpRf7lRYLTPwSrcv4aCypOnO8hux7H_biWBH3222A/formResponse";
foreach(var i in toggleArr)
{
if(i.isOn)
{
gender = i.name;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ConnectGoogle : MonoBehaviour
{
public Toggle[] toggleArr = new Toggle[3];
// InputField
private GameObject nameInput;
private GameObject phoneInput;
private GameObject emailInput;
// get string
private string name;
private string phone;
private string email;
private string gender;
[SerializeField]
private string connectURL = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSetCRbABNpRf7lRYLTPwSrcv4aCypOnO8hux7H_biWBH3222A/formResponse";
void Update()
{
foreach(var i in toggleArr)
{
if(i.isOn)
{
gender = i.name;
}
}
}
}
這時候我們要先回去 Google form 中取得 entry 的號碼,也就是相依在各個輸入進 InputField 的文本。 一樣在唯獨頁面,按下右鍵接著點選 "檢查”。
後續去ctrl F尋找 “entry.” 就會看到這四個 entry 的 ID 。
獲取這幾個Entry ID 後我們回到 Unity 開始撰寫該 IEnumerator function。目的就是要去串聯在 Google Form 中的各項問題。
// connect to the google form
IEnumerator Post(string _name, string _phone, string _email, string _gender)
{
WWWForm form1 = new WWWForm();
form1.AddField("entry.1853649617", _name);
form1.AddField("entry.1126305671", _phone);
form1.AddField("entry.1578833563", _email);
form1.AddField("entry.328455469", _gender);
byte[] rawData = form1.data;
WWW www = new WWW(connectURL, rawData);
yield return www;
}
name = nameInput.GetComponent<InputField>().text;
phone = phoneInput.GetComponent<InputField>().text;
email = emailInput.GetComponent<InputField>().text;
StartCoroutine(Post(name, phone, email, gender)); // call back to the Post IEnumerator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ConnectGoogle : MonoBehaviour
{
public Toggle[] toggleArr = new Toggle[3];
// InputField
public GameObject nameInput;
public GameObject phoneInput;
public GameObject emailInput;
// get string
private string name;
private string phone;
private string email;
private string gender;
[SerializeField]
private string connectURL = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSetCRbABNpRf7lRYLTPwSrcv4aCypOnO8hux7H_biWBH3222A/formResponse";
void Update()
{
}
// connect to the google form
IEnumerator Post(string _name, string _phone, string _email, string _gender)
{
WWWForm form1 = new WWWForm();
form1.AddField("entry.1853649617", _name);
form1.AddField("entry.1126305671", _phone);
form1.AddField("entry.1578833563", _email);
form1.AddField("entry.328455469", _gender);
byte[] rawData = form1.data;
WWW www = new WWW(connectURL, rawData);
yield return www;
}
// want to send by button, set public!
public void SendTOGoogleForm()
{
name = nameInput.GetComponent<InputField>().text;
phone = phoneInput.GetComponent<InputField>().text;
email = emailInput.GetComponent<InputField>().text;
foreach(var i in toggleArr)
{
if(i.isOn)
{
gender = i.name;
}
}
StartCoroutine(Post(name, phone, email, gender)); // call back to the Post IEnumerator
}
}
首先我們要將我們的 Scripts 拉到 FromCanvas 上面。接著就是要把各個物件與 Toggle 放上去。接著整個樣是在設計一下。請注意到 Toggle 有變動。
點選我們右下角的按鈕,並且將該包含有腳本的空白物件 ConnectManager 放進去 OnClick 事件中。
在 No Function 點選後會有下拉選單,我們這邊選擇該 ConnectGoogle,請注意到說我們選擇的void Function 必須要是 public 的型態。
這邊修改一下 Toggle,我們新增一個 ToggleGroup 空白物件並且新增一個 Component,就叫做 Toggle Group。後續將我們的Toggle 都放進去該 Toggle Group 中。
取消勾選其中兩個 Toggle 的 Is On,並且注意到一定要記得將剛剛新增的 ToggleGroup 放進到每個 Toggle 中的 Group 裡面,如下:
這樣我們點選任一Toggle 就僅會有一個為 IsOn。
執行後我們輸入一些資訊在內部中,並且點選 Send Button。
完成後開始執行點選 send 後會發現 google form 會立即更新。一直點選就會一直 Send 資料到我們的 Google Form 中。
接著按右邊右上角的 Sheet,會產生相生一個 Excel Sheet。
這樣就完成了XDDD,後續也可以直接拿來當作與遠端的資料庫儲存的方式。